package vectortile.feature;

import com.google.protobuf.MessageOrBuilder;
import vectortile.model.GeomType;

/**
 * @Author jlj
 * @Date 2020/12/28 11:53
 * @Description
 * @Modified
 */
public interface FeatureOrBuilder extends MessageOrBuilder {

    /**
     * <code>optional uint64 id = 1 [default = 0];</code>
     */
    boolean hasId();

    /**
     * <code>optional uint64 id = 1 [default = 0];</code>
     */
    long getId();

    /**
     * <pre>
     * Tags of this feature are encoded as repeated pairs of
     * integers.
     * A detailed description of tags is located in sections
     * 4.2 and 4.4 of the specification
     * </pre>
     *
     * <code>repeated uint32 tags = 2 [packed = true];</code>
     */
    java.util.List<java.lang.Integer> getTagsList();

    /**
     * <pre>
     * Tags of this feature are encoded as repeated pairs of
     * integers.
     * A detailed description of tags is located in sections
     * 4.2 and 4.4 of the specification
     * </pre>
     *
     * <code>repeated uint32 tags = 2 [packed = true];</code>
     */
    int getTagsCount();

    /**
     * <pre>
     * Tags of this feature are encoded as repeated pairs of
     * integers.
     * A detailed description of tags is located in sections
     * 4.2 and 4.4 of the specification
     * </pre>
     *
     * <code>repeated uint32 tags = 2 [packed = true];</code>
     */
    int getTags(int index);

    /**
     * <pre>
     * The type of geometry stored in this feature.
     * </pre>
     *
     * <code>optional .vector_tile.Tile.GeomType type = 3 [default = UNKNOWN];</code>
     */
    boolean hasType();

    /**
     * <pre>
     * The type of geometry stored in this feature.
     * </pre>
     *
     * <code>optional .vector_tile.Tile.GeomType type = 3 [default = UNKNOWN];</code>
     */
    GeomType getType();

    /**
     * <pre>
     * Contains a stream of commands and parameters (vertices).
     * A detailed description on geometry encoding is located in
     * section 4.3 of the specification.
     * </pre>
     *
     * <code>repeated uint32 geometry = 4 [packed = true];</code>
     */
    java.util.List<java.lang.Integer> getGeometryList();

    /**
     * <pre>
     * Contains a stream of commands and parameters (vertices).
     * A detailed description on geometry encoding is located in
     * section 4.3 of the specification.
     * </pre>
     *
     * <code>repeated uint32 geometry = 4 [packed = true];</code>
     */
    int getGeometryCount();

    /**
     * <pre>
     * Contains a stream of commands and parameters (vertices).
     * A detailed description on geometry encoding is located in
     * section 4.3 of the specification.
     * </pre>
     *
     * <code>repeated uint32 geometry = 4 [packed = true];</code>
     */
    int getGeometry(int index);
}
